TypeScript 扩展全局 Window 报错的解决
原文:https://zhuanlan.zhihu.com/p/364767359
使用全局 window 上自定义的属性,TypeScript 会报属性不存在,
console.log(window.foo) // ❌ Property ‘foo’ does not exist on type 'Window & typeof globalThis'.ts(2339)
需要将自定义变量扩展到全局 window 上,可通过在项目中添加类型文件或正常的 .ts 文件,只要在 tsconfig.json 配置范围内能找到即可。
types.d.ts
declare global {
interface Window {
foo: string;
}
}
此时再使用就正常了,
console.log(window.foo) // ✅
如果在进行类型扩展时报如下错误:
Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.ts(2669)
可在类型文件中添加如下内容以指定文件为模板,报错消除。
types.d.ts
+ export {};
declare global {
interface Window {
foo: string;
}
}